package top.z.work.module.system.convert;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import top.z.work.framework.common.pojo.PageInfo;
import top.z.work.module.system.controller.dict.vo.SystemDictDataCreateVO;
import top.z.work.module.system.controller.dict.vo.SystemDictDataModifyVO;
import top.z.work.module.system.controller.dict.vo.SystemDictDataVO;
import top.z.work.module.system.entity.SystemDictData;

import java.util.List;

@Mapper
public interface SystemDictDataConvert {

    SystemDictDataConvert INSTANCE = Mappers.getMapper(SystemDictDataConvert.class);

    default QueryWrapper convert(SystemDictDataVO parameter) {
        return QueryChain.of(SystemDictData.class)
                .eq(SystemDictData::getIdentity, parameter.getIdentity())
                .eq(SystemDictData::getParent, parameter.getParent())
                .eq(SystemDictData::getCode, parameter.getCode())
                .eq(SystemDictData::getName, parameter.getName())
                .eq(SystemDictData::getValue, parameter.getValue())
                .eq(SystemDictData::getSort, parameter.getSort())
                ;
    }

    List<SystemDictDataVO> convert(List<SystemDictData> parameter);

    SystemDictData convert(SystemDictDataModifyVO parameter);

    SystemDictDataVO convert(SystemDictData parameter);

    SystemDictData convert(SystemDictDataCreateVO parameter);

    default PageInfo<SystemDictDataVO> convert(Page<SystemDictData> page) {
        List<SystemDictDataVO>     list     = page.getRecords().stream().map(this::convert).toList();
        PageInfo<SystemDictDataVO> pageInfo = new PageInfo<>();
        pageInfo.setList(list);
        pageInfo.setTotal(page.getTotalRow());
        pageInfo.setSize(page.getPageSize());
        pageInfo.setPage(page.getPageNumber());
        return pageInfo;
    }

}
